Higher Kinded Types
型を受け取って型を返す型 (* → *)。高階型、Higher Rank Typesとも。HKTと略される。
例えばHKTの無いOCamlでは、'a list は型ではなく型コンストラクタという扱いになっているが、HKTのあるHaskell(List A または [A])では * → * という A型を受け取って[A]を返す型である。 式を取って式を返すという関数が式であるとさまざまな実りがある(c.f. ラムダ計算)ように、型を受け取って型を返すという仕組みも型に含まれているとさまざまな嬉しさがある。 code:haskell
class Functor f where
fmap :: (a -> b) -> f a -> f b
上のコードのfはまさに* → *という型を要請している。
その反面、非常に強力な機能であるため、実装が難しかったり推論がキツくなったりするなどの欠点がある。
色々頑張ってHKTをエンコードする方法があり、OCamlのhigherやTypeScriptのfp-tsはこれを利用している。